﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using System.Data;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;
using System.Collections;
using eepg_contratos.Utilities;

namespace eepg_contratos.Models
{
    #region SeguridadesModels
    public class UsuarioModel
    {
        public String guid { get; set; }
        public String codigo { get; set; }
        public String usuario { get; set; }
        public String password { get; set; }
        public String nombre { get; set; }
        public String observacion { get; set; }
        public String id_estado { get; set; }
        public String estado { get; set; }
        public String fecha_ing { get; set; }
        public String usuario_ing { get; set; }

        public String codigo_rol { get; set; }
        public String rol { get; set; }
    }

    public class OpcionModel
    {
        public String guid { get; set; }
        public String descripcion { get; set; }
        public String url { get; set; }
        public String guid_padre { get; set; }
        public String padre { get; set; }
        public String imagen { get; set; }
        public String indice_orden { get; set; }
        public String id_estado { get; set; }
        public String estado { get; set; }
        public String fecha_ing { get; set; }
        public String usuario_ing { get; set; }
    }

    public class RolModel
    {
        public String guid { get; set; }
        public String descripcion { get; set; }
        public String id_estado { get; set; }
        public String estado { get; set; }
        public String fecha_ing { get; set; }
        public String usuario_ing { get; set; }
    }

    public class ObjetoModel 
    {
        public String guid { get; set; }
        public String descripcion { get; set; }
        public String id { get; set; }
        public String id_estado { get; set; }
        public String estado { get; set; }
        public String fecha_ing { get; set; }
        public String usuario_ing { get; set; }
    }

    public class UsuarioRolModel
    {
        public String guid_rol { get; set; }
        public String guid_usuario { get; set; }
        public String fecha_ing { get; set; }
        public String usuario_ing { get; set; }
    }

    public class RolOpcionModel
    {
        public String guid { get; set; }
        public String guid_rol { get; set; }
        public String guid_opcion { get; set; }
        public String opcion { get; set; }
        public String estado { get; set; }
        public String acceder { get; set; }
        public String borrar { get; set; }
        public String editar { get; set; }
        public String exportar { get; set; }
        public String importar { get; set; }
        public String listar { get; set; }
        public String ver { get; set; }
        public String fecha_ing { get; set; }
        public String usuario_ing { get; set; }
    }

    public class RolObjetoModel
    {
        public String guid_rol { get; set; }
        public String guid_objeto { get; set; }
        public String acceder { get; set; }
        public String borrar { get; set; }
        public String editar { get; set; }
        public String exportar { get; set; }
        public String importar { get; set; }
        public String listar { get; set; }
        public String ver { get; set; }
        public String fecha_ing { get; set; }
        public String usuario_ing { get; set; }
    }

    #endregion

    #region SeguridadesServices
    public class SeguridadesServices
    {
        private DataTable usuarios;
        private DataTable opciones;
        private DataTable rol_opciones;

        public SeguridadesServices()
        {
            usuarios = new DataTable();
            opciones = new DataTable();
            rol_opciones = new DataTable();

            //USUARIOS
            usuarios.Columns.Add("Codigo", Type.GetType("System.String"));
            usuarios.Columns.Add("Usuario", Type.GetType("System.String"));
            usuarios.Columns.Add("Nombre", Type.GetType("System.String"));
            usuarios.Columns.Add("Rol", Type.GetType("System.String"));
            usuarios.Columns.Add("Observacion", Type.GetType("System.String"));
            usuarios.Columns.Add("Estado", Type.GetType("System.String"));
            usuarios.Columns.Add("Fecha Ingreso", Type.GetType("System.DateTime"));
            usuarios.Columns.Add("Guid", Type.GetType("System.String"));

            //OPCIONES
            opciones.Columns.Add("Descripcion", Type.GetType("System.String"));
            opciones.Columns.Add("URL", Type.GetType("System.String"));
            opciones.Columns.Add("Padre", Type.GetType("System.String"));
            opciones.Columns.Add("Imagen", Type.GetType("System.String"));
            opciones.Columns.Add("Estado", Type.GetType("System.String"));
            opciones.Columns.Add("Fecha Ingreso", Type.GetType("System.DateTime"));
            opciones.Columns.Add("Guid", Type.GetType("System.String"));

            //ROL_OPCIONES
            rol_opciones.Columns.Add("Opcion", Type.GetType("System.String"));
            rol_opciones.Columns.Add("Estado", Type.GetType("System.String"));
            rol_opciones.Columns.Add("Acceder", Type.GetType("System.String"));
            rol_opciones.Columns.Add("Borrar", Type.GetType("System.String"));
            rol_opciones.Columns.Add("Editar", Type.GetType("System.String"));
            rol_opciones.Columns.Add("Exportar", Type.GetType("System.String"));
            rol_opciones.Columns.Add("Importar", Type.GetType("System.String"));
            rol_opciones.Columns.Add("Listar", Type.GetType("System.String"));
            rol_opciones.Columns.Add("Ver", Type.GetType("System.String"));
            rol_opciones.Columns.Add("Guid", Type.GetType("System.String"));

        }

        public UsuarioModel VerificarUsuario(UsuarioModel a)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.DesarrolloContratos;
            OracleCommand Comm = new OracleCommand();

            Comm.Connection = con;
            Comm.CommandText = "PKG_SEGUR.PROC_VERIFICA_USUARIO";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_usuario", a.usuario);
            Comm.Parameters.Add("p_password", a.password);
            Comm.Parameters.Add("p_guid", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_nombre", OracleDbType.Varchar2, 200).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_codigo", OracleDbType.Varchar2, 10).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_rol", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror ", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            con.Open();
            Comm.ExecuteNonQuery();

            if (Comm.Parameters["p_codigo"].Value.ToString() ==  "null")
            {
                Comm.Dispose();
                con.Close();
                GC.Collect();
                a.codigo = "";
                return a;
            }
            
            a.guid = Comm.Parameters["p_guid"].Value.ToString();
            a.nombre = Comm.Parameters["p_nombre"].Value.ToString();
            a.codigo = Comm.Parameters["p_codigo"].Value.ToString();
            a.codigo_rol = Comm.Parameters["p_rol"].Value.ToString();

            Comm.Dispose();
            con.Close();
            GC.Collect();

            return a;
        }

        public String GenerarMenu(String guid_rol)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.DesarrolloContratos;
            OracleCommand Comm = new OracleCommand();
            ArrayList vPadre = new ArrayList();
            OracleDataReader oReader;
            OpcionModel o;
            String html = "";

            Comm.Connection = con;
            Comm.CommandText = "PKG_SEGUR.PROC_OBTENER_PADRE_OPCIONES";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror ", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            con.Open();
            oReader = Comm.ExecuteReader();

            while (oReader.Read())
            {
                o = new OpcionModel();
                o.guid = oReader["id"].ToString();
                o.descripcion = oReader["descripcion"].ToString();
                o.imagen = oReader["imagen"].ToString();
                o.indice_orden = oReader["indice_orden"].ToString();
                vPadre.Add(o);
            }
            Comm.Dispose();
            con.Close();
            GC.Collect();
            int menu_index = 0;

            foreach (OpcionModel item in vPadre)
            {

                
                Comm = new OracleCommand();
                Comm.Connection = con;
                Comm.CommandText = "PKG_SEGUR.PROC_OBTENER_OPCIONES_MENU";
                Comm.CommandType = CommandType.StoredProcedure;
                Comm.Parameters.Add("p_guid_padre", item.guid);
                Comm.Parameters.Add("p_guid_rol", guid_rol);
                Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
                Comm.Parameters.Add("p_coderror ", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
                Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;
                con.Open();
                oReader = Comm.ExecuteReader();

                o = new OpcionModel();
                String html2 = "";
                html2 += "<div>";
                int i = 0;
                menu_index += 1;
                while (oReader.Read())
                {
                    i += 1;
                    o.guid = oReader["guid"].ToString();
                    o.descripcion = oReader["descripcion"].ToString();
                    o.imagen = oReader["imagen"].ToString();
                    o.url = oReader["url"].ToString();
                    o.indice_orden = oReader["indice_orden"].ToString();

                    String habilitado = oReader["acceder"].ToString();

                    //html2 += "<div id='" + o.guid + "' class='opcion'><div style='display: none'>" + o.url + "</div>" + o.descripcion + "</div>";
                    
                    if (habilitado == "1"){
                        html2 += "<a id='" + menu_index + "_" + o.guid + "' href='.." + o.url + "?guid=" + menu_index + "_" + o.guid + "'>";
                        html2 += "<div id='opcion_" + o.guid + "' class='opcion'>";
                        if (o.imagen == "null" || o.imagen == "")
                        { html2 += "<img src='../Images/item.png' /> "; }
                        else
                        { html2 += "<img src='.." + o.imagen + "' /> "; }
                        
                        html2 += o.descripcion;
                        html2 += "</div>";
                        html2 += "</a>";
                    }
                    else {
                        html2 += "<div id='" + o.guid + "' class='opcion_off' title='Insuficientes privilegios para esta opción.'>";
                        if (o.imagen == "null" || o.imagen == "")
                        { html2 += "<img src='../Images/item.png' /> "; }
                        else
                        { html2 += "<img src='.." + o.imagen + "' /> "; }
                        html2 += o.descripcion + "</div>";
                    }
                    
                }
                html2 += "</div>";

                if (i > 0)
                {
                    html += "<h3 id='grupomenu" + menu_index + "'>" + item.descripcion + "</h3>";
                    html += html2;
                }
                else
                {
                    menu_index -= 1;
                }

                Comm.Dispose();
                con.Close();
                GC.Collect();
            }

            return html;
        }

        public RolOpcionModel VerificarPermisosOpcion(RolOpcionModel ro)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.DesarrolloContratos;
            OracleCommand Comm = new OracleCommand();
            OracleDataReader oReader;
            String html = "";

            Comm.Connection = con;
            Comm.CommandText = "PKG_SEGUR.PROC_PERMISOS_OPCION";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_guid_opcion", ro.guid_opcion);
            Comm.Parameters.Add("p_guid_rol", ro.guid_rol);
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror ", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            con.Open();
            oReader = Comm.ExecuteReader();

            while (oReader.Read())
            {
                ro.acceder = oReader["acceder"].ToString();
                ro.borrar = oReader["borrar"].ToString();
                ro.editar = oReader["editar"].ToString();
                ro.exportar = oReader["exportar"].ToString();
                ro.importar = oReader["importar"].ToString();
                ro.listar = oReader["listar"].ToString();
                ro.ver = oReader["ver"].ToString();
            }
            Comm.Dispose();
            con.Close();
            GC.Collect();

            return ro;
        }

        public DataTable ListarUsuarios()
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.DesarrolloContratos;
            OracleCommand Comm = new OracleCommand();
            ArrayList vUsuario = new ArrayList();

            Comm.Connection = con;
            Comm.CommandText = "PKG_SEGUR.PROC_OBTENER_USUARIOS";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror ", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            UsuarioModel u;
            usuarios.Rows.Clear();

            while (oReader.Read())
            {
                u = new UsuarioModel();
                u.guid = oReader["guid"].ToString();
                u.codigo = oReader["codigo"].ToString();
                u.usuario = oReader["usuario"].ToString();
                u.nombre = oReader["nombre"].ToString();
                u.observacion = oReader["observacion"].ToString();
                u.id_estado = oReader["id_estado"].ToString();
                u.fecha_ing = oReader["fecha_ing"].ToString();
                u.rol = oReader["rol"].ToString();
                u.estado = oReader["estado"].ToString();
                vUsuario.Add(u);
            }
            foreach (UsuarioModel item in vUsuario)
            {
                DataRow row = usuarios.NewRow();
                usuarios.Rows.Add(row);
                row["Codigo"] = "" + item.codigo.ToString();
                row["Usuario"] = "" + item.usuario.ToString();
                row["Nombre"] = "" + item.nombre.ToString();
                row["Rol"] = "" + item.rol.ToString();
                row["Observacion"] = item.observacion;
                row["Estado"] = item.estado;
                row["Fecha Ingreso"] = item.fecha_ing;
                row["Guid"] = item.guid;

            }
            Comm.Dispose();
            con.Close();
            GC.Collect();
            return usuarios;
        }

        public DataTable ListarOpciones()
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.DesarrolloContratos;
            OracleCommand Comm = new OracleCommand();
            ArrayList vOpcion = new ArrayList();

            Comm.Connection = con;
            Comm.CommandText = "PKG_SEGUR.PROC_OBTENER_OPCIONES";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror ", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            OpcionModel o;
            opciones.Rows.Clear();

            while (oReader.Read())
            {
                o = new OpcionModel();
                o.guid = oReader["guid"].ToString();
                o.descripcion = oReader["descripcion"].ToString();
                o.url = oReader["url"].ToString();
                o.imagen = oReader["imagen"].ToString();
                o.guid_padre = oReader["guid_padre"].ToString();
                o.padre = oReader["padre"].ToString();
                o.id_estado = oReader["id_estado"].ToString();
                o.estado = oReader["estado"].ToString();
                o.fecha_ing = oReader["fecha_ing"].ToString();
                vOpcion.Add(o);
            }
            foreach (OpcionModel item in vOpcion)
            {
                DataRow row = opciones.NewRow();
                opciones.Rows.Add(row);
                row["Descripcion"] = "" + item.descripcion.ToString();
                row["URL"] = "" + item.url.ToString();
                row["Padre"] = "" + item.padre.ToString();
                row["Imagen"] = "" + item.imagen.ToString();
                row["Estado"] = item.estado;
                row["Fecha Ingreso"] = item.fecha_ing;
                row["Guid"] = item.guid;

            }
            Comm.Dispose();
            con.Close();
            GC.Collect();
            return opciones;
        }

        public DataTable ListarOpcionesPorRol(String guid_rol)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.DesarrolloContratos;
            OracleCommand Comm = new OracleCommand();
            ArrayList vRolOpcion = new ArrayList();

            Comm.Connection = con;
            Comm.CommandText = "PKG_SEGUR.PROC_CONSULTAR_OPCIONES_X_ROL";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_guid_rol", guid_rol);
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror ", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            RolOpcionModel o;
            rol_opciones.Rows.Clear();

            while (oReader.Read())
            {
                o = new RolOpcionModel();
                o.guid = oReader["guid"].ToString();
                o.opcion = oReader["descripcion"].ToString();
                o.acceder = oReader["acceder"].ToString();
                o.borrar = oReader["borrar"].ToString();
                o.editar = oReader["editar"].ToString();
                o.exportar = oReader["exportar"].ToString();
                o.importar = oReader["importar"].ToString();
                o.listar = oReader["listar"].ToString();
                o.ver = oReader["ver"].ToString();
                o.estado = oReader["estado"].ToString();
                o.fecha_ing = oReader["fecha_ing"].ToString();

                vRolOpcion.Add(o);
            }

            foreach (RolOpcionModel item in vRolOpcion)
            {
                DataRow row = rol_opciones.NewRow();
                rol_opciones.Rows.Add(row);
                row["Opcion"] = "" + item.opcion.ToString();
                row["Estado"] = "" + item.estado.ToString();
                row["Acceder"] = "" + item.acceder.ToString();
                row["Borrar"] = "" + item.borrar.ToString();
                row["Editar"] = "" + item.editar.ToString();
                row["Exportar"] = "" + item.exportar.ToString();
                row["Importar"] = "" + item.importar.ToString();
                row["Listar"] = "" + item.listar.ToString();
                row["Ver"] = "" + item.ver.ToString();
                row["Estado"] = item.estado;
                row["Guid"] = item.guid;

            }
            Comm.Dispose();
            con.Close();
            GC.Collect();
            return rol_opciones;
        }

        public ArrayList ConsultarUsuario(String guid)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.DesarrolloContratos;
            OracleCommand Comm = new OracleCommand();
            ArrayList vUsuario = new ArrayList();

            Comm.Connection = con;
            Comm.CommandText = "PKG_SEGUR.PROC_CONSULTAR_USUARIO";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_guid", guid);
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror ", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            UsuarioModel u;

            while (oReader.Read())
            {
                u = new UsuarioModel();
                u.guid = oReader["guid"].ToString();
                u.codigo = oReader["codigo"].ToString();
                u.usuario = oReader["usuario"].ToString();
                u.password = oReader["password"].ToString();
                u.nombre = oReader["nombre"].ToString();
                u.observacion = oReader["observacion"].ToString();
                u.id_estado = oReader["id_estado"].ToString();
                u.codigo_rol = oReader["guid_rol"].ToString();
                u.rol = oReader["rol"].ToString();

                vUsuario.Add(u);
            }
            Comm.Dispose();
            con.Close();
            GC.Collect();
            return vUsuario;
        }

        public ArrayList ConsultarOpcion(String guid)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.DesarrolloContratos;
            OracleCommand Comm = new OracleCommand();
            ArrayList vOpcion = new ArrayList();

            Comm.Connection = con;
            Comm.CommandText = "PKG_SEGUR.PROC_CONSULTAR_OPCION";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_guid", guid);
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror ", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            OpcionModel o;

            while (oReader.Read())
            {
                o = new OpcionModel();
                o.guid = oReader["guid"].ToString();
                o.descripcion = oReader["descripcion"].ToString();
                o.url = oReader["url"].ToString();
                o.imagen = oReader["imagen"].ToString();
                o.guid_padre = oReader["guid_padre"].ToString();
                o.padre = oReader["padre"].ToString();
                o.id_estado = oReader["id_estado"].ToString();

                vOpcion.Add(o);
            }
            Comm.Dispose();
            con.Close();
            GC.Collect();
            return vOpcion;
        }

        public ArrayList ConsultarPermisoOpcion(String guid)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.DesarrolloContratos;
            OracleCommand Comm = new OracleCommand();
            ArrayList vPermiso = new ArrayList();

            Comm.Connection = con;
            Comm.CommandText = "PKG_SEGUR.PROC_CONSULTAR_PERMISO";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_guid", guid);
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror ", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            RolOpcionModel o;

            while (oReader.Read())
            {
                o = new RolOpcionModel();
                o.guid = oReader["guid"].ToString();
                o.guid_opcion = oReader["guid_opcion"].ToString();
                o.opcion = oReader["descripcion"].ToString();
                o.acceder = oReader["acceder"].ToString();
                o.borrar = oReader["borrar"].ToString();
                o.editar = oReader["editar"].ToString();
                o.exportar = oReader["exportar"].ToString();
                o.importar = oReader["importar"].ToString();
                o.listar = oReader["listar"].ToString();
                o.ver = oReader["ver"].ToString();

                vPermiso.Add(o);
            }
            Comm.Dispose();
            con.Close();
            GC.Collect();
            return vPermiso;
        }

        public ArrayList ListarRoles()
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.DesarrolloContratos;
            OracleCommand Comm = new OracleCommand();
            ArrayList vListado = new ArrayList();

            Comm.Connection = con;
            Comm.CommandText = "PKG_SEGUR.PROC_OBTENER_ROLES";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror ", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            ListadoModel l;

            while (oReader.Read())
            {
                l = new ListadoModel();
                l.id = oReader["id"].ToString();
                l.descripcion = oReader["descripcion"].ToString();
                vListado.Add(l);
            }

            Comm.Dispose();
            con.Close();
            GC.Collect();

            return vListado;
        }

        public ArrayList ListarPadres()
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.DesarrolloContratos;
            OracleCommand Comm = new OracleCommand();
            ArrayList vListado = new ArrayList();

            Comm.Connection = con;
            Comm.CommandText = "PKG_SEGUR.PROC_OBTENER_PADRE_OPCIONES";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror ", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            ListadoModel l;

            while (oReader.Read())
            {
                l = new ListadoModel();
                l.id = oReader["id"].ToString();
                l.descripcion = oReader["descripcion"].ToString();
                vListado.Add(l);
            }

            Comm.Dispose();
            con.Close();
            GC.Collect();

            return vListado;
        }

        public ArrayList ListarOpcionesDisponiblesPorRol(String guid_rol)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.DesarrolloContratos;
            OracleCommand Comm = new OracleCommand();
            ArrayList vListado = new ArrayList();

            Comm.Connection = con;
            Comm.CommandText = "PKG_SEGUR.PROC_OPCIONES_DISPONIBLES_ROL";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_guid_rol", guid_rol);
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror ", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            ListadoModel l;

            while (oReader.Read())
            {
                l = new ListadoModel();
                l.id = oReader["id"].ToString();
                l.descripcion = oReader["descripcion"].ToString();
                vListado.Add(l);
            }

            Comm.Dispose();
            con.Close();
            GC.Collect();

            return vListado;
        }

        public String GuardarUsuario(UsuarioModel a)
        {
            ConexionModel cm = new ConexionModel();

            String sql = "PKG_SEGUR.PROC_INGRESA_USUARIO";

            OracleConnection conn = cm.DesarrolloContratos;
            OracleCommand cmd = new OracleCommand();

            conn.Open();
            OracleTransaction tx = default(OracleTransaction);
            tx = conn.BeginTransaction();
            cmd = conn.CreateCommand();
            cmd.Transaction = tx;
            cmd.CommandText = sql;
            cmd.CommandType = CommandType.StoredProcedure;

            OracleParameterCollection param = cmd.Parameters;
            param.Add("p_guid", a.guid);
            param.Add("p_codigo", a.codigo);
            param.Add("p_usuario", a.usuario);
            param.Add("p_password", a.password);
            param.Add("p_nombre", a.nombre);
            param.Add("p_observacion", a.observacion);
            param.Add("p_id_estado", a.id_estado);
            param.Add("p_guid_rol", a.codigo_rol);
            param.Add("p_usuario_ing", a.usuario_ing);
            param.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            param.Add("p_mensaje", OracleDbType.Varchar2, 200).Direction = ParameterDirection.Output;
            String mensaje = "";
            try
            {
                cmd.ExecuteNonQuery();
                mensaje = cmd.Parameters["p_mensaje"].Value.ToString();
                if (mensaje == "null")
                {
                    mensaje = "";
                }
                tx.Commit();
                conn.Close();
                cmd.Dispose();
                GC.Collect();
            }
            catch (Exception ex)
            {
            }
            return mensaje;
        }

        public String GuardarOpcion(OpcionModel a)
        {
            ConexionModel cm = new ConexionModel();

            String sql = "PKG_SEGUR.PROC_INGRESA_OPCION";

            OracleConnection conn = cm.DesarrolloContratos;
            OracleCommand cmd = new OracleCommand();

            conn.Open();
            OracleTransaction tx = default(OracleTransaction);
            tx = conn.BeginTransaction();
            cmd = conn.CreateCommand();
            cmd.Transaction = tx;
            cmd.CommandText = sql;
            cmd.CommandType = CommandType.StoredProcedure;

            OracleParameterCollection param = cmd.Parameters;
            param.Add("p_guid", a.guid);
            param.Add("p_descripcion", a.descripcion);
            param.Add("p_url", a.url);
            param.Add("p_guid_padre", a.guid_padre);
            param.Add("p_imagen", a.imagen);
            param.Add("p_id_estado", a.id_estado);
            param.Add("p_usuario_ing", a.usuario_ing);
            param.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            param.Add("p_mensaje", OracleDbType.Varchar2, 200).Direction = ParameterDirection.Output;
            String mensaje = "";
            try
            {
                cmd.ExecuteNonQuery();
                mensaje = cmd.Parameters["p_mensaje"].Value.ToString();
                if (mensaje == "null")
                {
                    mensaje = "";
                }
                tx.Commit();
                conn.Close();
                cmd.Dispose();
                GC.Collect();
            }
            catch (Exception ex)
            {
            }
            return mensaje;
        }

        public String GuardarPermisoOpcion(RolOpcionModel a)
        {
            ConexionModel cm = new ConexionModel();

            String sql = "PKG_SEGUR.PROC_INGRESA_PERMISOS_OPCION";

            OracleConnection conn = cm.DesarrolloContratos;
            OracleCommand cmd = new OracleCommand();

            conn.Open();
            OracleTransaction tx = default(OracleTransaction);
            tx = conn.BeginTransaction();
            cmd = conn.CreateCommand();
            cmd.Transaction = tx;
            cmd.CommandText = sql;
            cmd.CommandType = CommandType.StoredProcedure;

            OracleParameterCollection param = cmd.Parameters;
            param.Add("p_guid", a.guid);
            param.Add("p_guid_rol", a.guid_rol);
            param.Add("p_guid_opcion", a.guid_opcion);
            param.Add("p_acceder", a.acceder);
            param.Add("p_borrar", a.borrar);
            param.Add("p_editar", a.editar);
            param.Add("p_exportar", a.exportar);
            param.Add("p_importar", a.importar);
            param.Add("p_listar", a.listar);
            param.Add("p_ver", a.ver);
            param.Add("p_usuario_ing", a.usuario_ing);
            param.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            param.Add("p_mensaje", OracleDbType.Varchar2, 200).Direction = ParameterDirection.Output;
            String mensaje = "";
            try
            {
                cmd.ExecuteNonQuery();
                mensaje = cmd.Parameters["p_mensaje"].Value.ToString();
                if (mensaje == "null")
                {
                    mensaje = "";
                }
                tx.Commit();
                conn.Close();
                cmd.Dispose();
                GC.Collect();
            }
            catch (Exception ex)
            {
            }
            return mensaje;
        }

        public String GuardarRol(RolModel a)
        {
            ConexionModel cm = new ConexionModel();

            String sql = "PKG_SEGUR.PROC_INGRESA_ROL";

            OracleConnection conn = cm.DesarrolloContratos;
            OracleCommand cmd = new OracleCommand();

            conn.Open();
            OracleTransaction tx = default(OracleTransaction);
            tx = conn.BeginTransaction();
            cmd = conn.CreateCommand();
            cmd.Transaction = tx;
            cmd.CommandText = sql;
            cmd.CommandType = CommandType.StoredProcedure;

            OracleParameterCollection param = cmd.Parameters;
            param.Add("p_guid", a.guid);
            param.Add("p_descripcion", a.descripcion);
            param.Add("p_id_estado", a.id_estado);
            param.Add("p_usuario_ing", a.usuario_ing);
            param.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            param.Add("p_mensaje", OracleDbType.Varchar2, 200).Direction = ParameterDirection.Output;
            String mensaje = "";
            try
            {
                cmd.ExecuteNonQuery();
                mensaje = cmd.Parameters["p_mensaje"].Value.ToString();
                if (mensaje == "null")
                {
                    mensaje = "";
                }
                tx.Commit();
                conn.Close();
                cmd.Dispose();
                GC.Collect();
            }
            catch (Exception ex)
            {
            }
            return mensaje;
        }

        public void EliminarUsuario(UsuarioModel a)
        {
            ConexionModel cm = new ConexionModel();

            String sql = "PKG_SEGUR.PROC_DESACTIVAR_USUARIO";

            OracleConnection conn = cm.DesarrolloContratos;
            OracleCommand cmd = new OracleCommand();

            conn.Open();
            OracleTransaction tx = default(OracleTransaction);
            tx = conn.BeginTransaction();
            cmd = conn.CreateCommand();
            cmd.Transaction = tx;
            cmd.CommandText = sql;
            cmd.CommandType = CommandType.StoredProcedure;

            OracleParameterCollection param = cmd.Parameters;
            param.Add("p_guid", a.guid);
            param.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            param.Add("p_mensaje ", OracleDbType.Varchar2, 150).Direction = ParameterDirection.Output;

            try
            {
                cmd.ExecuteNonQuery();
                tx.Commit();
                conn.Close();
                cmd.Dispose();
                GC.Collect();
            }
            catch (Exception ex)
            {
            }
        }

        public void EliminarOpcion(OpcionModel o)
        {
            ConexionModel cm = new ConexionModel();

            String sql = "PKG_SEGUR.PROC_DESACTIVAR_OPCION";

            OracleConnection conn = cm.DesarrolloContratos;
            OracleCommand cmd = new OracleCommand();

            conn.Open();
            OracleTransaction tx = default(OracleTransaction);
            tx = conn.BeginTransaction();
            cmd = conn.CreateCommand();
            cmd.Transaction = tx;
            cmd.CommandText = sql;
            cmd.CommandType = CommandType.StoredProcedure;

            OracleParameterCollection param = cmd.Parameters;
            param.Add("p_guid", o.guid);
            param.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            param.Add("p_mensaje ", OracleDbType.Varchar2, 150).Direction = ParameterDirection.Output;

            try
            {
                cmd.ExecuteNonQuery();
                tx.Commit();
                conn.Close();
                cmd.Dispose();
                GC.Collect();
            }
            catch (Exception ex)
            {
            }
        }

        public void EliminarRol(RolModel o)
        {
            ConexionModel cm = new ConexionModel();

            String sql = "PKG_SEGUR.PROC_DESACTIVAR_ROL";

            OracleConnection conn = cm.DesarrolloContratos;
            OracleCommand cmd = new OracleCommand();

            conn.Open();
            OracleTransaction tx = default(OracleTransaction);
            tx = conn.BeginTransaction();
            cmd = conn.CreateCommand();
            cmd.Transaction = tx;
            cmd.CommandText = sql;
            cmd.CommandType = CommandType.StoredProcedure;

            OracleParameterCollection param = cmd.Parameters;
            param.Add("p_guid", o.guid);
            param.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            param.Add("p_mensaje ", OracleDbType.Varchar2, 150).Direction = ParameterDirection.Output;

            try
            {
                cmd.ExecuteNonQuery();
                tx.Commit();
                conn.Close();
                cmd.Dispose();
                GC.Collect();
            }
            catch (Exception ex)
            {
            }
        }
    }
    #endregion

    #region SeguridadesValidation

    #endregion

}
